{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "60198935",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import networkx as nx\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib as mpl\n",
    "import geopandas as gpd\n",
    "from coord_convert.transform import wgs2gcj, wgs2bd, gcj2wgs, gcj2bd, bd2wgs, bd2gcj \n",
    "from shapely.geometry import Point,Polygon,shape\n",
    "import shapely.geometry\n",
    "import sys\n",
    "sys.path.append(r'./packages_rely/')\n",
    "import plot_map\n",
    "import json\n",
    "import osmnx as ox\n",
    "from scipy.spatial.distance import pdist\n",
    "from scipy import spatial\n",
    "import math\n",
    "from math import radians, cos, sin, asin, sqrt\n",
    "import osmnx as ox\n",
    "import folium\n",
    "import os\n",
    "import copy\n",
    "from sklearn import preprocessing\n",
    "plt.rc('font',family='Times New Roman')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "59e76ab8",
   "metadata": {},
   "source": [
    "# 1.数据读取和特征提取"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "809ca8f3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>osmid</th>\n",
       "      <th>impor</th>\n",
       "      <th>geometry</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0.000804</td>\n",
       "      <td>POINT (120.23123 30.21360)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0.001529</td>\n",
       "      <td>POINT (120.23095 30.21403)</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   osmid     impor                    geometry\n",
       "0      0  0.000804  POINT (120.23123 30.21360)\n",
       "1      1  0.001529  POINT (120.23095 30.21403)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 读取拓扑重要性结果\n",
    "df_top_imp = gpd.read_file('./数据/结点拓扑重要性结果/所有结点拓扑及重要性/所有结点拓扑及重要性.shp')\n",
    "df_top_imp = df_top_imp[['osmid','impor','geometry']]\n",
    "df_top_imp.head(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "43f5d58b",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "交叉口画像结果：\n",
      "      impor  nodeid      freq  labels  top_minmax  freq_minmax  \\\n",
      "0  0.074383     514  14097.64       2    0.487439     0.207592   \n",
      "\n",
      "                     geometry  \n",
      "0  POINT (120.23909 30.20229)  \n",
      "临时办事车辆：\n",
      "   car_num  peak0318  nonpeak0318  peak0319  nonpeak0319  peak0320  \\\n",
      "0  云A00L27       1.0          0.0       0.0          0.0       0.0   \n",
      "\n",
      "   nonpeak0320  peak0321  nonpeak0321  peak0322  nonpeak0322  \\\n",
      "0          0.0       0.0          0.0       0.0          0.0   \n",
      "\n",
      "                      feats  fre_peak  fre_nonpeak  traday_peak  \\\n",
      "0  (1.0, nan, 1, 0, 1, 1.0)       1.0          0.0            1   \n",
      "\n",
      "   traday_nonpeak  traday  fre_avg  \n",
      "0               0       1      1.0  \n",
      "频繁过境车辆：\n",
      "   car_num  peak0318  nonpeak0318  peak0319  nonpeak0319  peak0320  \\\n",
      "0  云A11400       1.0          0.0       0.0          0.0       0.0   \n",
      "\n",
      "   nonpeak0320  peak0321  nonpeak0321  peak0322  nonpeak0322  \\\n",
      "0          0.0       1.0          0.0       0.0          0.0   \n",
      "\n",
      "                      feats  fre_peak  fre_nonpeak  traday_peak  \\\n",
      "0  (1.0, nan, 2, 0, 2, 1.0)       1.0          0.0            2   \n",
      "\n",
      "   traday_nonpeak  traday  fre_avg  \n",
      "0               0       2      1.0  \n",
      "聚类画像结果：\n",
      "   car_num  peak0318  nonpeak0318  peak0319  nonpeak0319  peak0320  \\\n",
      "0  云A114QQ       2.0         27.0       3.0          7.0       9.0   \n",
      "\n",
      "   nonpeak0320  peak0321  nonpeak0321  peak0322  nonpeak0322  \\\n",
      "0          9.0      13.0         33.0       5.0          6.0   \n",
      "\n",
      "                        feats  fre_peak  fre_nonpeak  traday_peak  \\\n",
      "0  (6.4, 16.4, 5, 5, 5, 22.8)       6.4         16.4            5   \n",
      "\n",
      "   traday_nonpeak  traday  fre_avg  labels  \n",
      "0               5       5     22.8       1  \n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\Anaconda\\lib\\site-packages\\pandas\\core\\frame.py:4449: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  errors=errors,\n",
      "E:\\Anaconda\\lib\\site-packages\\ipykernel_launcher.py:21: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "E:\\Anaconda\\lib\\site-packages\\ipykernel_launcher.py:24: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{0, 1, 2, 3, 4}\n",
      "   car_num  vehlab\n",
      "0  云A114QQ       1\n",
      "              camera_idxx   camera_addr          in_time_latest turn_dir  \\\n",
      "0  33010900001320130299xx  风情大道-晨晖路南向北1 2018-11-01 11:28:01.362      南向北   \n",
      "\n",
      "  camera_type camera_service_ip  channel_id  channel_num        lat  \\\n",
      "0          枪机      33.90.129.76   1000053.0         15.0  30.142625   \n",
      "\n",
      "          lng  ... citydogcj02lat  citydogcj02lng camera_node node_gcj02lat  \\\n",
      "0  120.251083  ...      30.136641      120.244824    风情大道-晨晖路     30.137144   \n",
      "\n",
      "   node_gcj02lng                                  lnglat84       lng84  \\\n",
      "0     120.245001  (120.24035064995653, 30.139100201406947)  120.240351   \n",
      "\n",
      "     lat84  nodeid   dis2node  \n",
      "0  30.1391     483  51.412587  \n",
      "\n",
      "[1 rows x 24 columns]\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>geometry</th>\n",
       "      <th>nodeid</th>\n",
       "      <th>camera_id</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>POINT (120.23909 30.20229)</td>\n",
       "      <td>514</td>\n",
       "      <td>33010900001322920480</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>POINT (120.23909 30.20229)</td>\n",
       "      <td>514</td>\n",
       "      <td>33010900001322920479</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     geometry  nodeid             camera_id\n",
       "0  POINT (120.23909 30.20229)     514  33010900001322920480\n",
       "1  POINT (120.23909 30.20229)     514  33010900001322920479"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 读取交叉口画像结果和车辆画像结果\n",
    "gdf = gpd.read_file(r'./数据/交叉口画像结果/交叉口画像结果.shp')\n",
    "gdf.rename(columns={'freq_minma':'freq_minmax'},inplace=True)\n",
    "gdf.plot()\n",
    "plt.show()\n",
    "path = './数据/车辆画像结果/'\n",
    "df_tem = pd.read_csv(path+\"临时办事车辆.csv\",encoding='gbk')  # 一周内仅仅出现一天的车辆\n",
    "df_transit = pd.read_csv(path+'频繁过境车辆.csv',encoding='gbk') # 一周出现大于一天，日均被检测频次小于等于2次的车辆\n",
    "df_ana = pd.read_csv(path+\"聚类画像结果.csv\",encoding='gbk') # 聚类画像结果\n",
    "print(\"交叉口画像结果：\")\n",
    "print(gdf.head(1))\n",
    "print(\"临时办事车辆：\")\n",
    "print(df_tem.head(1))\n",
    "print(\"频繁过境车辆：\")\n",
    "print(df_transit.head(1))\n",
    "print(\"聚类画像结果：\")\n",
    "print(df_ana.head(1))\n",
    "df_veh = df_ana[['car_num','labels']]\n",
    "df_veh.rename(columns={'labels':'vehlab'},inplace=True)\n",
    "tmp = df_tem[['car_num']]\n",
    "tmp['vehlab']=3\n",
    "df_veh = df_veh.append(tmp,ignore_index=False)\n",
    "tmp = df_transit[['car_num']]\n",
    "tmp['vehlab']=4\n",
    "df_veh = df_veh.append(tmp,ignore_index=False)\n",
    "print(set(df_veh['vehlab']))\n",
    "print(df_veh.head(1))\n",
    "# 得到各个交叉口及其映射的电警\n",
    "# 电警与交叉口映射\n",
    "# 设备信息表1\n",
    "dev_df = pd.read_excel(\"./数据/distinct_camera.xlsx\")\n",
    "dev_df.dropna(how='all',inplace=True,axis=0)\n",
    "dev_df.dropna(how='all',inplace=True,axis=1)\n",
    "# 将电警卡口的经纬度转化为84坐标系\n",
    "def conv284(ser):\n",
    "    return gcj2wgs(ser[0],ser[1])\n",
    "    \n",
    "dev_df['lnglat84'] = dev_df[['citydogcj02lng','citydogcj02lat']].apply(conv284 , axis=1)\n",
    "dev_df['lng84'] = dev_df[['lnglat84']].applymap(lambda x:x[0])\n",
    "dev_df['lat84'] = dev_df[['lnglat84']].applymap(lambda x:x[1])\n",
    "# 读取网络\n",
    "G = ox.io.load_graphml(filepath='./数据/基于osmnx的路网爬取/graph84坐标系.graphml')\n",
    "# 将交叉口与电警做映射，算法是利用直线距离最近来匹配\n",
    "nn, dist = ox.distance.nearest_nodes(G, dev_df['lng84'], dev_df['lat84'], return_dist=True)\n",
    "dev_df['nodeid'] = nn ; dev_df['dis2node'] = dist\n",
    "# 将电警与交叉口的映射可视化\n",
    "dev_df = dev_df[dev_df['dis2node'] < 100]\n",
    "dev_df.reset_index(drop=True,inplace=True)\n",
    "print(dev_df.head(1))\n",
    "#将交叉口画像结果与电警映射\n",
    "gdf = pd.merge(gdf[['geometry','nodeid']],dev_df[['camera_id','nodeid']],how='inner',on='nodeid')\n",
    "gdf.head(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "57d4b1be",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0318日期正在被处理.\n",
      "重复数据占比为0.09892662759220844\n",
      "0319日期正在被处理.\n",
      "重复数据占比为0.10318317668995049\n",
      "0320日期正在被处理.\n",
      "重复数据占比为0.1054003294703309\n",
      "0321日期正在被处理.\n",
      "重复数据占比为0.09704732091897067\n",
      "0322日期正在被处理.\n",
      "重复数据占比为0.1010674548931182\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>nodeid</th>\n",
       "      <th>00</th>\n",
       "      <th>01</th>\n",
       "      <th>02</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "      <th>20</th>\n",
       "      <th>21</th>\n",
       "      <th>22</th>\n",
       "      <th>30</th>\n",
       "      <th>31</th>\n",
       "      <th>32</th>\n",
       "      <th>40</th>\n",
       "      <th>41</th>\n",
       "      <th>42</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>21</td>\n",
       "      <td>171.2</td>\n",
       "      <td>2835.0</td>\n",
       "      <td>2554.6</td>\n",
       "      <td>185.6</td>\n",
       "      <td>3304.4</td>\n",
       "      <td>2159.0</td>\n",
       "      <td>160.6</td>\n",
       "      <td>2218.8</td>\n",
       "      <td>2032.2</td>\n",
       "      <td>155.4</td>\n",
       "      <td>1297.4</td>\n",
       "      <td>1267.6</td>\n",
       "      <td>74.2</td>\n",
       "      <td>672.0</td>\n",
       "      <td>2015.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>22</td>\n",
       "      <td>184.0</td>\n",
       "      <td>1598.0</td>\n",
       "      <td>3522.4</td>\n",
       "      <td>210.4</td>\n",
       "      <td>1541.8</td>\n",
       "      <td>2838.6</td>\n",
       "      <td>169.2</td>\n",
       "      <td>1061.4</td>\n",
       "      <td>2915.8</td>\n",
       "      <td>136.0</td>\n",
       "      <td>682.2</td>\n",
       "      <td>1811.4</td>\n",
       "      <td>47.8</td>\n",
       "      <td>610.2</td>\n",
       "      <td>1043.6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   nodeid     00      01      02     10      11      12     20      21  \\\n",
       "0      21  171.2  2835.0  2554.6  185.6  3304.4  2159.0  160.6  2218.8   \n",
       "1      22  184.0  1598.0  3522.4  210.4  1541.8  2838.6  169.2  1061.4   \n",
       "\n",
       "       22     30      31      32    40     41      42  \n",
       "0  2032.2  155.4  1297.4  1267.6  74.2  672.0  2015.6  \n",
       "1  2915.8  136.0   682.2  1811.4  47.8  610.2  1043.6  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 将时间划分成三个时间段：1.00:00-6:30&19:30-24:00; 2.6:30-10:00&17:00-19:30; 3.10:00-17:00,\n",
    "# 计算各个交叉口各时间段各类型车辆的过车总频次及各类型车辆占比\n",
    "dict_node_veh = {}\n",
    "for date in ['0318','0319','0320','0321','0322']:\n",
    "    df_node_veh = pd.DataFrame([])\n",
    "    print(\"{0}日期正在被处理.\".format(date))\n",
    "    # 读取萧山区的电警数据\n",
    "    path = './数据/萧山市车牌识别数据/'\n",
    "    df = pd.read_csv(path+date+\".csv\")\n",
    "    df.drop(columns=['Unnamed: 0'],inplace=True)\n",
    "    df.rename(columns={'0':'car_num','1':'cap_date','2':'type','3':'dev_id','4':'dir','5':'road_id','6':'turn_id'},inplace=True)\n",
    "    # 解决车辆在同一时间同一地点被重复检测问题\n",
    "    len1 = len(df)\n",
    "    df = df.drop_duplicates(subset=['car_num' , 'cap_date'])\n",
    "    print(\"重复数据占比为{0}\".format((len1-len(df)) / len1))\n",
    "    df = pd.merge(df[['car_num','cap_date','dev_id']],gdf,how = 'inner',left_on='dev_id',right_on='camera_id')\n",
    "    df.drop(columns=['camera_id'] , inplace=True)\n",
    "    # 将车辆画像的label也增加进去\n",
    "    df = pd.merge(df,df_veh,how='inner',on='car_num')\n",
    "    df['t']=df[['cap_date']].applymap(lambda x:x[11:16])\n",
    "    # 处理00:00-6:30&21:30-24:00时间段数据\n",
    "    tmp = df[((df['t']>='00:00')&(df['t']<='06:30'))|((df['t']>='19:30')&(df['t']<='24:00'))]\n",
    "    tmp = tmp.groupby(['nodeid','vehlab'])[['car_num']].count().reset_index().rename(columns={'car_num':'freq'})\n",
    "    tmp['time']=0\n",
    "    df_node_veh = df_node_veh.append(tmp,ignore_index=True)\n",
    "    # 处理6:30-10:30&15:30-21:30时间段数据\n",
    "    tmp = df[((df['t']>='06:30')&(df['t']<='10:00'))|((df['t']>='17:00')&(df['t']<='19:30'))]\n",
    "    tmp = tmp.groupby(['nodeid','vehlab'])[['car_num']].count().reset_index().rename(columns={'car_num':'freq'})\n",
    "    tmp['time']=1\n",
    "    df_node_veh = df_node_veh.append(tmp,ignore_index=True)\n",
    "    # 处理10:30-15:30时间段数据\n",
    "    tmp = df[((df['t']>='10:00')&(df['t']<='17:00'))]\n",
    "    tmp = tmp.groupby(['nodeid','vehlab'])[['car_num']].count().reset_index().rename(columns={'car_num':'freq'})\n",
    "    tmp['time']=2\n",
    "    df_node_veh = df_node_veh.append(tmp,ignore_index=True)\n",
    "    df_node_veh.rename(columns={'freq':date},inplace=True)\n",
    "    df_node_veh = df_node_veh.sort_values(by=['nodeid','vehlab','time'])\n",
    "    dict_node_veh[date] = df_node_veh\n",
    "# 将一周的各交叉口各类型车辆占比取均值\n",
    "for date in ['0319','0320','0321','0322']:\n",
    "    dict_node_veh['0318']['0318'] = dict_node_veh['0318']['0318'] + dict_node_veh[date][date]\n",
    "df_avg = dict_node_veh['0318']\n",
    "df_avg['0318'] = df_avg['0318'] / 5\n",
    "df_avg.rename(columns={'0318':'freq'},inplace=True)\n",
    "# 整理格式成透视表,除了nodeid列，其他列第一个字符串是车辆类别（0-4），第二个字符串是时间类别（0-2）\n",
    "df = df_avg.pivot(index='nodeid',columns=['vehlab','time'],values='freq').reset_index().dropna()\n",
    "df.columns = list(map(lambda x :str(x[0])+str(x[1]) , df.columns))\n",
    "df.head(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "dc29512c",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>nodeid</th>\n",
       "      <th>00</th>\n",
       "      <th>01</th>\n",
       "      <th>02</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "      <th>20</th>\n",
       "      <th>21</th>\n",
       "      <th>22</th>\n",
       "      <th>30</th>\n",
       "      <th>31</th>\n",
       "      <th>32</th>\n",
       "      <th>40</th>\n",
       "      <th>41</th>\n",
       "      <th>42</th>\n",
       "      <th>osmid</th>\n",
       "      <th>impor</th>\n",
       "      <th>geometry</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>21</td>\n",
       "      <td>171.2</td>\n",
       "      <td>2835.0</td>\n",
       "      <td>2554.6</td>\n",
       "      <td>185.6</td>\n",
       "      <td>3304.4</td>\n",
       "      <td>2159.0</td>\n",
       "      <td>160.6</td>\n",
       "      <td>2218.8</td>\n",
       "      <td>2032.2</td>\n",
       "      <td>155.4</td>\n",
       "      <td>1297.4</td>\n",
       "      <td>1267.6</td>\n",
       "      <td>74.2</td>\n",
       "      <td>672.0</td>\n",
       "      <td>2015.6</td>\n",
       "      <td>21</td>\n",
       "      <td>0.014461</td>\n",
       "      <td>POINT (120.26848 30.22620)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>22</td>\n",
       "      <td>184.0</td>\n",
       "      <td>1598.0</td>\n",
       "      <td>3522.4</td>\n",
       "      <td>210.4</td>\n",
       "      <td>1541.8</td>\n",
       "      <td>2838.6</td>\n",
       "      <td>169.2</td>\n",
       "      <td>1061.4</td>\n",
       "      <td>2915.8</td>\n",
       "      <td>136.0</td>\n",
       "      <td>682.2</td>\n",
       "      <td>1811.4</td>\n",
       "      <td>47.8</td>\n",
       "      <td>610.2</td>\n",
       "      <td>1043.6</td>\n",
       "      <td>22</td>\n",
       "      <td>0.014462</td>\n",
       "      <td>POINT (120.28227 30.22416)</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   nodeid     00      01      02     10      11      12     20      21  \\\n",
       "0      21  171.2  2835.0  2554.6  185.6  3304.4  2159.0  160.6  2218.8   \n",
       "1      22  184.0  1598.0  3522.4  210.4  1541.8  2838.6  169.2  1061.4   \n",
       "\n",
       "       22     30      31      32    40     41      42  osmid     impor  \\\n",
       "0  2032.2  155.4  1297.4  1267.6  74.2  672.0  2015.6     21  0.014461   \n",
       "1  2915.8  136.0   682.2  1811.4  47.8  610.2  1043.6     22  0.014462   \n",
       "\n",
       "                     geometry  \n",
       "0  POINT (120.26848 30.22620)  \n",
       "1  POINT (120.28227 30.22416)  "
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 将拓扑重要性结果和各时段被检测频次合并在一起\n",
    "df=pd.merge(df,df_top_imp,how='inner',left_on='nodeid',right_on='osmid')\n",
    "df.head(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "1d88d621",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\Anaconda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:788: FutureWarning: 'precompute_distances' was deprecated in version 0.23 and will be removed in 1.0 (renaming of 0.25). It has no effect\n",
      "  \". It has no effect\", FutureWarning)\n",
      "E:\\Anaconda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:793: FutureWarning: 'n_jobs' was deprecated in version 0.23 and will be removed in 1.0 (renaming of 0.25).\n",
      "  \" removed in 1.0 (renaming of 0.25).\", FutureWarning)\n",
      "E:\\Anaconda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:788: FutureWarning: 'precompute_distances' was deprecated in version 0.23 and will be removed in 1.0 (renaming of 0.25). It has no effect\n",
      "  \". It has no effect\", FutureWarning)\n",
      "E:\\Anaconda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:793: FutureWarning: 'n_jobs' was deprecated in version 0.23 and will be removed in 1.0 (renaming of 0.25).\n",
      "  \" removed in 1.0 (renaming of 0.25).\", FutureWarning)\n",
      "E:\\Anaconda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:788: FutureWarning: 'precompute_distances' was deprecated in version 0.23 and will be removed in 1.0 (renaming of 0.25). It has no effect\n",
      "  \". It has no effect\", FutureWarning)\n",
      "E:\\Anaconda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:793: FutureWarning: 'n_jobs' was deprecated in version 0.23 and will be removed in 1.0 (renaming of 0.25).\n",
      "  \" removed in 1.0 (renaming of 0.25).\", FutureWarning)\n",
      "E:\\Anaconda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:788: FutureWarning: 'precompute_distances' was deprecated in version 0.23 and will be removed in 1.0 (renaming of 0.25). It has no effect\n",
      "  \". It has no effect\", FutureWarning)\n",
      "E:\\Anaconda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:793: FutureWarning: 'n_jobs' was deprecated in version 0.23 and will be removed in 1.0 (renaming of 0.25).\n",
      "  \" removed in 1.0 (renaming of 0.25).\", FutureWarning)\n",
      "E:\\Anaconda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:788: FutureWarning: 'precompute_distances' was deprecated in version 0.23 and will be removed in 1.0 (renaming of 0.25). It has no effect\n",
      "  \". It has no effect\", FutureWarning)\n",
      "E:\\Anaconda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:793: FutureWarning: 'n_jobs' was deprecated in version 0.23 and will be removed in 1.0 (renaming of 0.25).\n",
      "  \" removed in 1.0 (renaming of 0.25).\", FutureWarning)\n",
      "E:\\Anaconda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:788: FutureWarning: 'precompute_distances' was deprecated in version 0.23 and will be removed in 1.0 (renaming of 0.25). It has no effect\n",
      "  \". It has no effect\", FutureWarning)\n",
      "E:\\Anaconda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:793: FutureWarning: 'n_jobs' was deprecated in version 0.23 and will be removed in 1.0 (renaming of 0.25).\n",
      "  \" removed in 1.0 (renaming of 0.25).\", FutureWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2 clustering method has been successfully run\n",
      "3 clustering method has been successfully run\n",
      "4 clustering method has been successfully run\n",
      "5 clustering method has been successfully run\n",
      "6 clustering method has been successfully run\n",
      "7 clustering method has been successfully run\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\Anaconda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:788: FutureWarning: 'precompute_distances' was deprecated in version 0.23 and will be removed in 1.0 (renaming of 0.25). It has no effect\n",
      "  \". It has no effect\", FutureWarning)\n",
      "E:\\Anaconda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:793: FutureWarning: 'n_jobs' was deprecated in version 0.23 and will be removed in 1.0 (renaming of 0.25).\n",
      "  \" removed in 1.0 (renaming of 0.25).\", FutureWarning)\n",
      "E:\\Anaconda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:788: FutureWarning: 'precompute_distances' was deprecated in version 0.23 and will be removed in 1.0 (renaming of 0.25). It has no effect\n",
      "  \". It has no effect\", FutureWarning)\n",
      "E:\\Anaconda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:793: FutureWarning: 'n_jobs' was deprecated in version 0.23 and will be removed in 1.0 (renaming of 0.25).\n",
      "  \" removed in 1.0 (renaming of 0.25).\", FutureWarning)\n",
      "E:\\Anaconda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:788: FutureWarning: 'precompute_distances' was deprecated in version 0.23 and will be removed in 1.0 (renaming of 0.25). It has no effect\n",
      "  \". It has no effect\", FutureWarning)\n",
      "E:\\Anaconda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:793: FutureWarning: 'n_jobs' was deprecated in version 0.23 and will be removed in 1.0 (renaming of 0.25).\n",
      "  \" removed in 1.0 (renaming of 0.25).\", FutureWarning)\n",
      "E:\\Anaconda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:788: FutureWarning: 'precompute_distances' was deprecated in version 0.23 and will be removed in 1.0 (renaming of 0.25). It has no effect\n",
      "  \". It has no effect\", FutureWarning)\n",
      "E:\\Anaconda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:793: FutureWarning: 'n_jobs' was deprecated in version 0.23 and will be removed in 1.0 (renaming of 0.25).\n",
      "  \" removed in 1.0 (renaming of 0.25).\", FutureWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "8 clustering method has been successfully run\n",
      "9 clustering method has been successfully run\n",
      "10 clustering method has been successfully run\n",
      "11 clustering method has been successfully run\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\Anaconda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:788: FutureWarning: 'precompute_distances' was deprecated in version 0.23 and will be removed in 1.0 (renaming of 0.25). It has no effect\n",
      "  \". It has no effect\", FutureWarning)\n",
      "E:\\Anaconda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:793: FutureWarning: 'n_jobs' was deprecated in version 0.23 and will be removed in 1.0 (renaming of 0.25).\n",
      "  \" removed in 1.0 (renaming of 0.25).\", FutureWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "12 clustering method has been successfully run\n"
     ]
    },
    {
     "data": {
      "image/png": "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el1zvQxOQsPMTjGz+ZRdnDgFWGxmgcVKnXPz8C1omWRm3+D7PXALZedDShSp4Xf/Gr5qk5WplwmM+ZJuERERERGR+k89MCIiIiIiEjWUwIiIiIiISNRQAiMiIiIiIlFDCYyIiIiIiEQNJTAiIiIiIhI1lMCIiIiIiEjUUAIjIiIiIiJRQwmMiIiIiIhEDSUwIiIiIiISNZTAiIiIiIhI1FACIyIiIiIiUUMJjIiIiIiIRA0lMCIi0uCYWQcz+8TMnP/xktcxiYhIzSiBERGRBsc5tx54xOs4RETk0CmBERGRhirX6wBEROTQKYEREREREZGooQRGRETEz8yOMbOtQXNjlnsdk4iIlKUERkRExM85twi4GNgHnOac6+lxSCIiUk6C1wGIiIjUF2bWGLgaGO2cm+d1PCIicjD1wIiIiABmlgp8BLyg5EVEpP5SD4yIiAg0AyYDQ4EEM/vAOVfkcUwiIlIB9cCIiIjAMGCv//WxwO88jEVERKqgBEZERAQ+Ac4FNvrbd5nZQA/jERGRSiiBERGRhsqCXzvntgOX+duJwGv+Sf0iIlKPKIEREZGGqm351865T4E3/Nt6AU9GOigREamaOee8jkFERCSizGwovkn7qUGb/w7cB2QDLYO2v+ecOz2C4YmISBWUwIiIiIiISNTQEDIREREREYkaSmBERERERCRqKIEREREREZGooQRGRERERESihhIYERERERGJGkpgRCifrT0AAACESURBVEREREQkaiiBERERERGRqKEERkREREREooYSGBERERERiRpKYEREREREJGoogRERERERkaihBEZERERERKKGEhgREREREYkaSmBERERERCRqKIEREREREZGooQRGRERERESihhIY+f/t1wEJAAAAgKD/r9sR6AsBAGBDYAAAgI0ApO1WMPw6BqQAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 900x600 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 将交叉口进行聚类分析\n",
    "from sklearn.cluster import KMeans\n",
    "from sklearn.metrics import silhouette_score\n",
    "from sklearn import preprocessing\n",
    "plt.rcParams['figure.dpi'] = 150 #分辨率\n",
    "Scores = [] # 存储不同初始聚类数目的轮廓系数值\n",
    "data = df[['00','01','02','10','11','12','20','21','22','30','31','32','40','41','42','impor']].values\n",
    "min_max_scaler = preprocessing.MinMaxScaler()\n",
    "data_minmax = min_max_scaler.fit_transform(data)\n",
    "for k in range(2,13):  \n",
    "    estimator = KMeans(n_clusters=k,init='k-means++', n_init=10, max_iter=300, tol=0.0001, \n",
    "                       precompute_distances='auto', verbose=0, random_state=0, copy_x=True, n_jobs=-1, \n",
    "                       algorithm='auto')  # 构造聚类器  \n",
    "    labels = estimator.fit_predict(data_minmax)  \n",
    "    Scores.append(silhouette_score(data_minmax , labels , random_state=0))  \n",
    "    print(\"{0} clustering method has been successfully run\".format(k))\n",
    "X = range(2,13)  \n",
    "plt.xlabel('k')  \n",
    "plt.ylabel('Silhouette Coefficient')  \n",
    "plt.plot(X,Scores,'o-')  \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "351f31cf",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.3322589314171372\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\Anaconda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:788: FutureWarning: 'precompute_distances' was deprecated in version 0.23 and will be removed in 1.0 (renaming of 0.25). It has no effect\n",
      "  \". It has no effect\", FutureWarning)\n",
      "E:\\Anaconda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:793: FutureWarning: 'n_jobs' was deprecated in version 0.23 and will be removed in 1.0 (renaming of 0.25).\n",
      "  \" removed in 1.0 (renaming of 0.25).\", FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>nodeid</th>\n",
       "      <th>00</th>\n",
       "      <th>01</th>\n",
       "      <th>02</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "      <th>20</th>\n",
       "      <th>21</th>\n",
       "      <th>22</th>\n",
       "      <th>30</th>\n",
       "      <th>31</th>\n",
       "      <th>32</th>\n",
       "      <th>40</th>\n",
       "      <th>41</th>\n",
       "      <th>42</th>\n",
       "      <th>osmid</th>\n",
       "      <th>impor</th>\n",
       "      <th>geometry</th>\n",
       "      <th>labels</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>21</td>\n",
       "      <td>171.2</td>\n",
       "      <td>2835.0</td>\n",
       "      <td>2554.6</td>\n",
       "      <td>185.6</td>\n",
       "      <td>3304.4</td>\n",
       "      <td>2159.0</td>\n",
       "      <td>160.6</td>\n",
       "      <td>2218.8</td>\n",
       "      <td>2032.2</td>\n",
       "      <td>155.4</td>\n",
       "      <td>1297.4</td>\n",
       "      <td>1267.6</td>\n",
       "      <td>74.2</td>\n",
       "      <td>672.0</td>\n",
       "      <td>2015.6</td>\n",
       "      <td>21</td>\n",
       "      <td>0.014461</td>\n",
       "      <td>POINT (120.26848 30.22620)</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>22</td>\n",
       "      <td>184.0</td>\n",
       "      <td>1598.0</td>\n",
       "      <td>3522.4</td>\n",
       "      <td>210.4</td>\n",
       "      <td>1541.8</td>\n",
       "      <td>2838.6</td>\n",
       "      <td>169.2</td>\n",
       "      <td>1061.4</td>\n",
       "      <td>2915.8</td>\n",
       "      <td>136.0</td>\n",
       "      <td>682.2</td>\n",
       "      <td>1811.4</td>\n",
       "      <td>47.8</td>\n",
       "      <td>610.2</td>\n",
       "      <td>1043.6</td>\n",
       "      <td>22</td>\n",
       "      <td>0.014462</td>\n",
       "      <td>POINT (120.28227 30.22416)</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   nodeid     00      01      02     10      11      12     20      21  \\\n",
       "0      21  171.2  2835.0  2554.6  185.6  3304.4  2159.0  160.6  2218.8   \n",
       "1      22  184.0  1598.0  3522.4  210.4  1541.8  2838.6  169.2  1061.4   \n",
       "\n",
       "       22     30      31      32    40     41      42  osmid     impor  \\\n",
       "0  2032.2  155.4  1297.4  1267.6  74.2  672.0  2015.6     21  0.014461   \n",
       "1  2915.8  136.0   682.2  1811.4  47.8  610.2  1043.6     22  0.014462   \n",
       "\n",
       "                     geometry  labels  \n",
       "0  POINT (120.26848 30.22620)       0  \n",
       "1  POINT (120.28227 30.22416)       0  "
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 聚类成2个簇看一下结果\n",
    "estimator = KMeans(n_clusters=2,init='k-means++', n_init=10, max_iter=300, tol=0.0001, \n",
    "                       precompute_distances='auto', verbose=0, random_state=0, copy_x=True, n_jobs=-1, \n",
    "                       algorithm='auto')  # 构造聚类器\n",
    "labels = estimator.fit_predict(data_minmax)\n",
    "print(silhouette_score(data_minmax , labels , random_state=0))\n",
    "df['labels'] = labels\n",
    "df.head(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "ae87e011",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "第0个簇的描述性统计：\n",
      "           nodeid          00           01           02           10  \\\n",
      "count  141.000000  141.000000   141.000000   141.000000   141.000000   \n",
      "mean   549.212766  324.229787  2600.609929  1285.126241   504.892199   \n",
      "std    254.081646  183.195429  1282.868386   669.265806   291.294668   \n",
      "min     21.000000   15.000000   584.800000   145.200000    32.600000   \n",
      "25%    354.000000  179.000000  1620.000000   790.800000   269.800000   \n",
      "50%    539.000000  284.200000  2348.800000  1231.400000   470.000000   \n",
      "75%    796.000000  453.400000  3270.800000  1689.600000   673.400000   \n",
      "max    893.000000  933.200000  7788.600000  3522.400000  1350.400000   \n",
      "\n",
      "                11           12           20           21           22  \\\n",
      "count   141.000000   141.000000   141.000000   141.000000   141.000000   \n",
      "mean   3058.995745  1049.195745   408.506383  2516.340426  1076.567376   \n",
      "std    1504.985852   569.121822   271.526032  1220.839605   548.404817   \n",
      "min     636.800000   152.600000    27.400000   551.400000   257.000000   \n",
      "25%    1808.400000   607.000000   205.000000  1472.000000   685.800000   \n",
      "50%    2903.600000   991.600000   352.000000  2453.800000   972.400000   \n",
      "75%    4062.400000  1339.200000   542.000000  3451.800000  1414.800000   \n",
      "max    7128.600000  3265.800000  1441.200000  6201.400000  2915.800000   \n",
      "\n",
      "                30           31           32          40           41  \\\n",
      "count   141.000000   141.000000   141.000000  141.000000   141.000000   \n",
      "mean    213.276596  1698.737589   928.909220  190.418440  2088.801418   \n",
      "std     144.705231   804.427146   522.308005  133.104294   996.018180   \n",
      "min       7.600000   367.000000   118.000000   15.600000   273.600000   \n",
      "25%     122.400000  1121.200000   523.200000   98.000000  1376.400000   \n",
      "50%     179.800000  1581.400000   829.600000  164.400000  1899.000000   \n",
      "75%     287.400000  2167.000000  1253.600000  238.400000  2700.600000   \n",
      "max    1124.600000  4396.200000  2825.800000  856.800000  4579.200000   \n",
      "\n",
      "                42       osmid       impor  labels  \n",
      "count   141.000000  141.000000  141.000000   141.0  \n",
      "mean   1026.326241  549.212766    0.027386     0.0  \n",
      "std     514.613507  254.081646    0.029236     0.0  \n",
      "min     115.200000   21.000000    0.000155     0.0  \n",
      "25%     604.600000  354.000000    0.007730     0.0  \n",
      "50%     988.000000  539.000000    0.013793     0.0  \n",
      "75%    1400.400000  796.000000    0.041890     0.0  \n",
      "max    2274.200000  893.000000    0.129909     0.0  \n",
      "第1个簇的描述性统计：\n",
      "           nodeid           00            01           02           10  \\\n",
      "count   59.000000    59.000000     59.000000    59.000000    59.000000   \n",
      "mean   189.203390   656.288136   4607.474576  2352.311864  1138.257627   \n",
      "std    134.084351   470.225802   1796.529490   676.235761   683.327017   \n",
      "min     26.000000   133.200000   2103.200000  1105.800000   318.800000   \n",
      "25%    100.500000   340.600000   3365.100000  1846.500000   623.900000   \n",
      "50%    176.000000   530.800000   4360.800000  2309.000000  1035.600000   \n",
      "75%    223.000000   805.400000   5579.800000  2833.000000  1367.100000   \n",
      "max    604.000000  2392.000000  10897.200000  3816.800000  3588.000000   \n",
      "\n",
      "                 11           12           20            21           22  \\\n",
      "count     59.000000    59.000000    59.000000     59.000000    59.000000   \n",
      "mean    6394.867797  1983.403390  1167.850847   5669.288136  2124.989831   \n",
      "std     2532.847739   581.535485   847.436721   2259.575491   707.151388   \n",
      "min     2510.400000   842.600000   234.600000   1703.200000   743.400000   \n",
      "25%     4670.400000  1686.700000   509.300000   4304.000000  1715.600000   \n",
      "50%     6019.800000  1921.800000  1002.600000   5362.800000  1976.000000   \n",
      "75%     7767.000000  2343.500000  1481.300000   6940.800000  2424.100000   \n",
      "max    14165.600000  3921.000000  4471.200000  13604.400000  4468.200000   \n",
      "\n",
      "                30           31           32          40           41  \\\n",
      "count    59.000000    59.000000    59.000000    59.00000    59.000000   \n",
      "mean    504.905085  3514.342373  2160.105085   346.00339  3460.410169   \n",
      "std     392.486801  1411.767600   789.622943   288.41031  1515.885570   \n",
      "min     126.000000  1364.000000   978.600000    69.20000  1360.800000   \n",
      "25%     278.300000  2572.900000  1720.700000   164.90000  2434.600000   \n",
      "50%     357.200000  3361.600000  1931.600000   287.20000  3189.200000   \n",
      "75%     622.700000  4165.500000  2534.900000   395.50000  4127.000000   \n",
      "max    2289.600000  8918.400000  5345.800000  1727.40000  9308.200000   \n",
      "\n",
      "                42       osmid      impor  labels  \n",
      "count    59.000000   59.000000  59.000000    59.0  \n",
      "mean   2503.596610  189.203390   0.042255     1.0  \n",
      "std     803.367724  134.084351   0.036304     0.0  \n",
      "min    1060.400000   26.000000   0.001038     1.0  \n",
      "25%    1954.200000  100.500000   0.015345     1.0  \n",
      "50%    2485.800000  176.000000   0.027681     1.0  \n",
      "75%    3119.900000  223.000000   0.064095     1.0  \n",
      "max    4412.400000  604.000000   0.152437     1.0  \n"
     ]
    }
   ],
   "source": [
    "for i in range(2):\n",
    "    print(\"第%s个簇的描述性统计：\"%i)\n",
    "    print(df[df['labels'] == i].describe())"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
